package com.xiaoshuidi.cloud.module.member.api.user;

import com.xiaoshuidi.cloud.framework.common.pojo.CommonResult;
import com.xiaoshuidi.cloud.framework.common.pojo.PageResult;
import com.xiaoshuidi.cloud.module.member.api.user.dto.MemberUserAuthInfoDTO;
import com.xiaoshuidi.cloud.module.member.api.user.dto.MemberUserPageDTO;
import com.xiaoshuidi.cloud.module.member.api.user.dto.MemberUserReqDTO;
import com.xiaoshuidi.cloud.module.member.api.user.dto.MemberUserRespDTO;
import com.xiaoshuidi.cloud.module.member.api.user.dto.ThirdPayUserReqDTO;
import com.xiaoshuidi.cloud.module.member.enums.ApiConstants;
import io.swagger.v3.oas.annotations.Operation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;


/**
 * 会员用户的 API 接口
 */
@FeignClient(name = ApiConstants.SERVERNAME)
public interface MemberUserApi {
    String PREFIX = ApiConstants.PREFIX + "/user";
//    /**
//     * 获得会员用户信息
//     *
//     * @param id 用户编号
//     * @return 用户信息
//     */
//    MemberUserRespDTO getUser(Long id);
//
//    /**
//     * 获得会员用户信息们
//     *
//     * @param ids 用户编号的数组
//     * @return 用户信息们
//     */
//    List<MemberUserRespDTO> getUsers(Collection<Long> ids);
//
//    /**
//     * 获得会员用户 Map
//     *
//     * @param ids 用户编号的数组
//     * @return 会员用户 Map
//     */
//    default Map<Long, MemberUserRespDTO> getUserMap(Collection<Long> ids) {
//        return convertMap(getUsers(ids), MemberUserRespDTO::getId);
//    }
//
//    /**
//     * 基于用户昵称，模糊匹配用户列表
//     *
//     * @param nickname 用户昵称，模糊匹配
//     * @return 用户信息的列表
//     */
//    List<MemberUserRespDTO> getUserListByNickname(String nickname);
//
//    /**
//     * 基于手机号，精准匹配用户
//     *
//     * @param mobile 手机号
//     * @return 用户信息
//     */
//    MemberUserRespDTO getUserByMobile(String mobile);


    @PostMapping(PREFIX + "/get-user-info")
    @Operation(summary = "会员信息")
    CommonResult<MemberUserRespDTO> getUserInfo(@RequestBody MemberUserReqDTO req);

    @PostMapping(PREFIX + "/get-user-auth-info")
    @Operation(summary = "会员认证信息")
    CommonResult<MemberUserAuthInfoDTO> getUserAuthInfo(@RequestParam("mobile") String moible);

    @PostMapping(PREFIX + "/get-user-page")
    @Operation(summary = "RPC分页查询会员信息")
    CommonResult<PageResult<MemberUserRespDTO>> getUserPage(@RequestBody MemberUserPageDTO page);

    @PostMapping(PREFIX + "/get-users-by-ids")
    @Operation(summary = "RPC分页查询会员信息")
    CommonResult<List<MemberUserRespDTO>> getUsersByIds(@RequestBody List<Long> ids);

    @GetMapping(PREFIX + "/get-user-by-id")
    CommonResult<MemberUserRespDTO> getUserById(@RequestParam("id") Long id);

    @PostMapping(PREFIX + "/register-third-member")
    CommonResult<Boolean> registerThirdMember(@RequestBody ThirdPayUserReqDTO thirdPayUserReqDTO);


    @PostMapping(PREFIX + "/bind-pay-flag")
    CommonResult<Boolean> bindPayFlag(@RequestParam("id") Long id);

    @GetMapping(PREFIX + "/get-user-by-card-no")
    CommonResult<MemberUserRespDTO> getUserByCardNo(@RequestParam("cardNo") String cardNo);


}
